gtk/queryimmodules.c: Make the output deterministic.
authorChris Lamb <chris@chris-lamb.co.uk>
Fri, 25 Aug 2017 15:24:38 +0000 (16:24 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 17 Jan 2018 03:38:32 +0000 (22:38 -0500)
Whilst working on the Reproducible Builds effort [0], we noticed that
queryimmodules generates non-reproducible output as it iterates over the
filesystem without sorting.

Patch attached.

 [0] https://reproducible-builds.org/

Signed-off-by: Chris Lamb <lamby@debian.org>
https://bugzilla.gnome.org/show_bug.cgi?id=786528

gtk/queryimmodules.c

index fab90fe48af4104f21cee425944daae766498c1a..c7c5c94ed601d45ae03fdbda3900656912eabf4f 100644 (file)
@@ -195,13 +195,19 @@ int main (int argc, char **argv)
             if (dir)
               {
                 const char *dent;
+                GList *list = NULL, *iterator = NULL;
 
                 while ((dent = g_dir_read_name (dir)))
+                  list = g_list_prepend (list, g_strdup (dent));
+
+                list = g_list_sort (list, (GCompareFunc) strcmp);
+                for (iterator = list; iterator; iterator = iterator->next)
                   {
-                    if (g_str_has_suffix (dent, SOEXT))
-                      error |= query_module (dirs[i], dent, contents);
+                    if (g_str_has_suffix (iterator->data, SOEXT))
+                      error |= query_module (dirs[i], iterator->data, contents);
                   }
 
+                g_list_free_full (list, g_free);
                 g_dir_close (dir);
               }